package com.demo.config;

import com.demo.controller.IndexController;
import com.demo.patch.PatchConstants;
import com.demo.patch.controller.PatchController;
import com.demo.patch.model.Patch;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.c3p0.C3p0Plugin;

/**
 * API引导式配置
 */
public class DemoConfig extends JFinalConfig {

  /**
   * 配置常量
   */
  public void configConstant(Constants me) {
    // 加载少量必要配置，随后可用getProperty(...)获取值
    loadPropertyFile("a_little_config.txt");
    me.setDevMode(getPropertyToBoolean("devMode", false));
    me.setUploadedFileSaveDirectory(PatchConstants.UPLOADPATH);
  }

  /**
   * 配置路由
   */
  public void configRoute(Routes me) {
    me.add("/", IndexController.class, "/index"); // 第三个参数为该Controller的视图存放路径
    me.add("/patch", PatchController.class); // 第三个参数省略时默认与第一个参数值相同，在此即为
    // "/blog"
  }

  /**
   * 配置插件
   */
  public void configPlugin(Plugins me) {
    // 配置C3p0数据库连接池插件
    C3p0Plugin c3p0Plugin =
        new C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password").trim());
    me.add(c3p0Plugin);

    // 配置ActiveRecord插件
    ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
    me.add(arp);
    arp.addMapping("patch", Patch.class); // 映射blog 表到 Blog模型
    arp.setShowSql(true);
    // 设置事务级别
    arp.setTransactionLevel(java.sql.Connection.TRANSACTION_READ_COMMITTED);
  }

  /**
   * 配置全局拦截器
   */
  public void configInterceptor(Interceptors me) {

  }

  /**
   * 配置处理器
   */
  public void configHandler(Handlers me) {

  }

  /**
   * 建议使用 JFinal 手册推荐的方式启动项目 运行此 main 方法可以启动项目，此main方法可以放置在任意的Class类定义中，不一定要放于此
   */
  public static void main(String[] args) {
    JFinal.start("src/main/webapp", 8090, "/", 5);
  }
}
